Rust For Screeps (3): 系统监控
参考 Screeps 制作统计图表 - 简书
首先说明: 本文使用 docker 将监控系统部署在自有服务器上,所以先决条件是一台能公网访问的服务器(
整体流程
具体实现
记录当前状态存入内存
在 Screeps 制作统计图表 - 简书 中使用的是 memory object 存储系统信息。遗憾的是在 rust 中无法使用 memory
对象,但是 screeps 还有另一个存储信息的地方,那就是 raw memory 。
raw memory
可以存储 10 MB 的序列化后的内容,它由一个个 segment
组成,每个segment
最多存储 100 KB 内容。所以可以指定一段 segment
用于存储当前系统的状态。
1 2 3 4 5
| fn log(&self) { let status_segement = raw_memory::segments(); let status = Status::get_status(); status_segement.set(STATUS_INDEX, status.into()); }
|
访问内存并解析内存内容
GitHub - booiris/rust-learning at screep_log
将信息存储到时序数据库中
使用 Grafana 制作图表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| version: '2' services: sync: restart: unless-stopped build: context: ./sync dockerfile: Dockerfile image: sync:1 volumes: - ./sync/log:/log depends_on: - influxdb
influxdb: image: influxdb:latest restart: unless-stopped volumes: - ./influxdb-data:/var/lib/influxdb2 - ./influxdb-config:/etc/influxdb2 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=${username} - DOCKER_INFLUXDB_INIT_PASSWORD=${pwd} - DOCKER_INFLUXDB_INIT_ORG=${org} - DOCKER_INFLUXDB_INIT_BUCKET=${bucket}
grafana: image: grafana/grafana:latest restart: unless-stopped ports: - '12002:3000' volumes: - ./grafana-data:/var/lib/grafana - ./grafana-provisioning/:/etc/grafana/provisioning depends_on: - influxdb user: "$UID:$GID" environment: - GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
|